Алгоритм SPEED

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
SPEED
Создатель Чжэн Юлян
Создан 1997 год
Опубликован 1997 год
Размер ключа 48-256 бит (кратное 16)
Размер блока 64, 128 или 256 бит
Число раундов ≥ 32 (кратное 4)
Тип Сеть Фейстеля

SPEED (Secure Package for Encrypting Electronic Data) — это алгоритм блочного симметричного шифрования, разработанный австралийским криптографом Чжэн Юляном[англ.], работавшим в университете Монаша. Основные параметры: раунд, длина блока и длина ключа являются переменными, в этом алгоритм похож на более известный аналог RC5.

Шифрование по алгоритму SPEED состоит из двух этапов. Процедура расширения ключа и непосредственно шифрование. Для дешифрования выполняется сначала процедура расширения ключа, а затем операции, обратные процедуре шифрования.

Так как алгоритм SPEED имеет переменные параметры, то для спецификации алгоритма с конкретными параметрами принято указывать (W,L,R)[1], где:

W — это размер блока шифруемых данных, который может принимать значения: 64, 128 и 256 бит соответственно.

L — это размер ключа, который принимает значение L диапазоне от 48 до 256 бит, которое кратно 16.

R — это количество раундов преобразований. Количество преобразований при этом должно быть не менее 32 и кратно 4.

Шифрование

[править | править код]

SPEED, применяя ключ К длиной L бит, преобразует открытый текст M из W бит в зашифрованный С той же длины.

Криптографический ключ K, представляющий собой строку из L бит, сначала расширяется с помощью функции планирования ключей на четыре ключа K1, K2, K3 и К4. Каждый из этих ключей состоит из R цикловых ключей, где указано количество раундов в каждом проходе.

Открытый текст M представляется как 8 строк, бит каждый. Эти 8 строк обрабатываются в фазах P1, P2, P3 и P4 последовательно. Каждая фаза называется проходом и включает в себя ключи К1, К2, К3, К4 соответственно . На выходе мы получим зашифрованный текст С из открытого М.

Все 4 фазы внутреннего прохода P1, P2, P3, P4 работают одинаково, хотя в каждом проходе используется отдельный подключ К1, К2, К3, К4, а также разные нелинейные функции для побитовых логических операций. Ниже на рисунке представлены эти функции[1]:

Фаза 1(P1): F1(X6,X5,X4,X3,X2,X1,X0) = X6X3X5X1X4X2X1X0X0

Фаза 2(P2): F2(X6,X5,X4,X3,X2,X1,X0) = X6X4X0X4X3X0X5X2X4X3X4X1X3X0X1

Фаза 3(P3): F3(X6,X5,X4,X3,X2,X1,X0) = X5X4X0X6X4X5X2X3X0X1X0X3

Фаза 4(P4): F4(X6,X5,X4,X3,X2,X1,X0) = X6X4X2X0X6X5X4X3X3X2X1X0X2

Расширение ключа

[править | править код]

Ключ шифрования/дешифрования K для SPEED представляет собой двоичную строку из L бит, где L является целым числом от 48 до 256 и делится на 16. Функция планирования ключей состоит в том, чтобы «расширять» ключ K на R фрагментов циклового ключа, необходимых для R раундов обработки.

Порядок расширения ключа

[править | править код]

Основной блок данных в планировании ключей — это двухбайтовые данные. Таким образом, байтный ключ сначала переводится во внутренние двухбайтовые блоки данных kb0,kb1, , kb-1.

Также в процессе расширения ключа принимают переменные S0, S1, S2. Их размер составляет также 2 байта. Их начальное значение равняется константам Q0, Q1, Q2 соответственно, значение которых прямо зависит от размера ключа шифрования. Значения Q0, Q1, Q2 получают из констант дробной части числа . Первые три константы из дробной части используются для случая L = 48, следующие три для L = 64 и так далее. Таким образом, в общей сложности 42 константы требуются для 14 различных длин ключей. Эти константы показаны ниже в шестнадцатеричной форме.

DF7B D629 E9DB 362F 5DO0 F20F C3D1
IFD2 589B 4312 91EB 718E BF2A IETD
B257 77A6 1654 6B2A 0D98 A9D3 668F
19BE F855 6D98 022D E4E2 D017 EA2F
7572 C3B5 1086 480C 3AA6 9CAO 98F7
DOE4 253C C901 55F3 9BF4 F659 D76C

Алгоритм планирования ключей расширяет наш массив до kblast-1, где last = при W = 64, last = R при W = 128, last = 2R при W = 256.

Дальнейший процесс расширения можно представить в виде нескольких шагов[1]:

  1. На переменные S0, S1, S2 действует функция G, которая представляется собой побитовую операцию G(S2, S1, S0) = S2,S1S1,S0S0,S2 (Здесь SiSj побитовое И, а SiSj битовый XOR). Мы получаем T = G (S0,S1, S2)
  2. Полученный результат поворачивает вправо на 5 бит.
  3. Далее T = T + S2 + kb[j] (mod 216), где i=j (mod ).
  4. Происходит сдвиг переменных S0, S1, S2 и новое значение T становится значением переменной S0: kb[i]=T S2=S1 S1=S0 S0=T
  5. Этот шаг переводит last двухбайтовые данные kb0, kb1, …, kblast-1 в R цикловых ключей, каждый из которых состоит из бит. Перевод поддерживает порядок двухбайтовых данных.

Полезные свойства

[править | править код]

Побитовая нелинейная логическая операция используется в каждом раунде. Чтобы усилить шифр против дифференциальной атаки на выходе операции применяется циклический сдвиг, зависящий от данных. Использование максимально нелинейной булевой функции в побитовой булевой операции помогло бы предотвратить линейную атаку[2].

Дешифрование

[править | править код]

В качестве шифра с закрытым ключом SPEED использует один и тот же ключ как для шифрования, так и для дешифрования. Чтобы расшифровать зашифрованный текст C с помощью ключа K, происходит весь процесс работы алгоритма в обратном порядке, за исключением планирования ключей, который остается неизменным. Другими словами внутренние операции каждого Pi, где i = 1, 2, 3, 4, будут проводиться в обратном порядке[1].

Преимущества и недостатки

[править | править код]
  • Простой и компактный в реализации: при реализации алгоритма на языке программирования C его объём занимает всего около 3 килобайт.
  • Алгоритм подвержен различным криптоатакам: дифференциальный криптоанализ и атака на связанные ключи.

Повышения криптоустойчивости можно добиться, увеличивая количество раундов, но это негативно влияет на производительность. Быстродействие алгоритма значительно падает, и становится в несколько раз меньше быстродействия аналогичного криптоустойчивого алгоритма RC5[3].

Примечания

[править | править код]
  1. 1 2 3 4 First International Conference, FC '97, Anguilla, British West Indies, February 24-28, 1997. Proceedings p.71-89
  2. SEBERRY,J., ZHANG,X. M., AND ZHENG,Y. Nonlinearity and propagation characteristics of balanced boolean functions. Information and Computation 119, 1 (1995)
  3. Cryptanalysis of SPEED by Chris Hall , John Kelsey, Vincent Rijmen, Bruce Schneier, David Wagner